public class Bubble {
    // 冒泡排序
    public static void sort(Comparable[] a){
        int n = a.length;
        for (int i = 0; i < n-1; i++){
            boolean flag = true;  // 标识：是否发生了交换。
            for (int j = n-1; j > i; j--){
                if (less(a[j], a[j-1])){
                    exch(a,j, j-1);
                    flag = false;
                }
            }
            //如果没有发生交换，说明已经有序，不必进行不必要的遍历。
            if (flag) break;
        }
    }

    private static boolean less(Comparable v, Comparable w){
        return v.compareTo(w) < 0;
    }

    private static void exch(Comparable[] a, int i, int j){
        Comparable t = a[i];
        a[i] = a[j];
        a[j] = t;
    }
}
